/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.goldentrade.negocio.interfaces.impl;

import br.com.goldentrade.negocio.interfaces.impl.serviceLocator.ServiceLocator;
import br.com.goldentrade.negocio.beans.Usuario;
import br.com.goldentrade.negocio.interfaces.IUsuario;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

/**
 *
 * @author Andre
 */
public class UsuarioImpl implements IUsuario {

    private EntityManager em;

    public void atualizar(Usuario usuario) {
        try {
            em = ServiceLocator.getEntityManager();
            em.getTransaction().begin();
            if (usuario.getCdUsuario() == null) {
                em.persist(usuario);
            } else {
                em.merge(usuario);
            }
            em.getTransaction().commit();
//            ServiceLocator.leaveEntityManager(em);

        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }

    }

    public void remover(Usuario usuario) {
        try {
            em = ServiceLocator.getEntityManager();
            em.getTransaction().begin();
            em.remove(usuario);
            em.getTransaction().commit();
            ServiceLocator.leaveEntityManager(em);

        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }
    }

    public Usuario selecionar(int cd) {
        Usuario u = null;
        try {
            em = ServiceLocator.getEntityManager();
            u = (Usuario) em.createNamedQuery("Usuario.findByCdUsuario").setParameter("cdUsuario", cd).getSingleResult();
            ServiceLocator.leaveEntityManager(em);
        } catch (NoResultException e) {
            System.out.println(e.getStackTrace());
        }
        return u;

    }

    public List<Usuario> selecionarTudo() {
        List<Usuario> usuarios = null;
        try {
            em = ServiceLocator.getEntityManager();
            usuarios = em.createNamedQuery("Usuario.findAll").getResultList();
            ServiceLocator.leaveEntityManager(em);
        } catch (Exception e) {
        }
        if (usuarios != null) {
            return usuarios;
        } else {
            try {
                throw new Exception("Não possui dados");
            } catch (Exception ex) {
                Logger.getLogger(UsuarioImpl.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    public Usuario getUserByLogin(String login) {
        Usuario u = null;
        em = ServiceLocator.getEntityManager();
        u = (Usuario) em.createNamedQuery("Usuario.findByLgUsuario").setParameter("lgUsuario", login).getSingleResult();
        ServiceLocator.leaveEntityManager(em);
        return u;
    }
}
